package com.sinog.biz.service.business;

import com.sinog.core.domain.PrisonerMain;
import com.sinog.core.model.PrisonerMainAndHcVo;
import com.sinog.core.model.PrisonerXixxVo;
import com.sinog.core.model.PrisonerXjxxInVo;
import com.sinog.core.model.UserDTO;
import com.sinog.core.model.XjReceiptDataVo;
import com.sinog.core.utilbean.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;

/**
 * @desc 预安置管理 - 服刑人员信息录入
 * @author -
 * @date -
 */
@RestController
public interface PrisonerMainService {

    /**
     * 预安置管理 - 预安置人员信息录入 - 查询列表
     * @param pageIndex 起始索引
     * @param pageSize 数据条数
     * @param querykey 查询条件
     * @return String 预安置人员信息录入数据列表
     */
    @RequestMapping("/azbj/inmates/info/list")
    String getInmatesList(
            @RequestParam("pageIndex") Integer pageIndex,
            @RequestParam("pageSize") Integer pageSize,
            @RequestParam("querykey") String querykey);

    /**
     * 预安置管理 - 预安置人员信息录入 - 批量导入 查询列表
     * @param pageIndex 起始页
     * @param pageSize 止页
     * @param querykey 搜索条件
     * @return String
     */
    @RequestMapping("/azbj/inmates/info/listExcel")
    String getInmatesListExcel(
            @RequestParam("pageIndex") Integer pageIndex,
            @RequestParam("pageSize") Integer pageSize,@RequestParam("querykey") String querykey);

    /**
     * 预安置管理 - 预安置人员信息录入 - 基本信息(新增)
     * @param data 基本信息
     * @param user 账户信息
     * @param flag 新增修改标志 0:新增,1:修改
     * @return Result
     */
    @PostMapping("/azbj/baseinfo/save")
    Result saveBaseInfo(@RequestParam("data") String data,
                        @RequestBody UserDTO user,
                        @RequestParam("flag") String flag);

    /**
     * 预安置管理 - 预安置人员信息录入 - 批量导入 - 基本信息(更新)
     * @param data 基本信息
     * @param user 账户信息
     * @return Result
     */
    @PostMapping("/azbj/baseinfo/updateexcel")
    Result updataBaseInfoExcel(@RequestParam("data") String data,@RequestBody UserDTO user);

    /**
     * 更新核查状态
     * @param priNum 服刑人员编号
     * @param state 核查状态
     */
    @PostMapping("/azbj/baseinfo/updateState")
    void updateStateI(@RequestParam("priNum") String priNum,@RequestParam("state") String state);

    /**
     * 预安置管理 - 预释放人员衔接 - (补录信息、待衔接、衔接中、已衔接、衔接失败) - 列表数据
     * @param user 当前登录用户
     * @param searchmap 搜索条件
     * @param prisonerXjxxInVo 搜索条件
     * @return String
     */
    @PostMapping("/yazgl/xjxx/xxbl/list")
    String getXxblList(
            @RequestBody UserDTO user,@RequestParam Map<String,Object> searchmap,PrisonerXjxxInVo prisonerXjxxInVo);

    /**
     * 预安置管理 - 预释放人员衔接 - 信息补录 - 保存
     * @param map 业务数据
     * @return Result
     */
    @PostMapping("/azbj/yazgl/xj/save")
    Result insertCjpg(@RequestParam Map<String,Object> map);

    /**
     * 根据犯罪编号查询罪犯基本信息
     * @param prinum 犯罪编号
     * @return String
     */
    @PostMapping("/azbj/yazgl/baseinfo/edit")
    String getInmateInfo(@RequestParam("prinum") String prinum);

    /**
     * 根据犯罪编号查询罪犯基本信息 - excel
     * @param prinum 犯罪编号
     * @return String
     */
    @PostMapping("/azbj/yazgl/baseinfo/editexcel")
    String getInmateInfoExcel(@RequestParam("prinum") String prinum);

    /**
     * 预安置管理 - 预安置人员信息录入 - 删除(逻辑删除)
     * @param prinum 犯罪编号
     * @return Result
     */
    @PostMapping("/azbj/yazgl/baseinfo/remove")
    Result removeListBaseInfo(@RequestParam(required = false, defaultValue = "-1") String prinum);

    /**
     * 预安置管理 - 预安置人员信息录入 - 批量导入 - 删除(逻辑删除)
     * @param prinum 犯罪编号
     * @return Result
     */
    @PostMapping("/azbj/yazgl/baseinfo/removeexcel")
    Result removeListBaseInfoExcel(@RequestParam(required = false, defaultValue = "-1") String prinum);

    /**
     * 预安置管理 - 预安置人员信息录入 - 批量导入 - 批量删除(逻辑删除)
     * @param prinumLists 罪犯编号
     * @return Result
     */
    @PostMapping("/azbj/yazgl/baseinfo/removeexcels")
    Result removeListBaseInfoExcels(@RequestParam(name = "prinumLists",required = false) List<String> prinumLists);

    /**
     * 信息补录 - 发起衔接 - 衔接信息 - 保存
     * @param data 业务数据
     * @param departid 部门Id
     * @param departName 部门名称
     * @param account 账号
     * @return int 受影响行数
     */
    @PostMapping("/feign/azbj/yazgl/xj/insert")
    Result insertXjxx(
            @RequestBody String data,
            @RequestParam String departid,@RequestParam String departName,@RequestParam String account);

    /**
     * 预安置管理 - 预释放人员衔接 - 衔接中 - 回执
     * @param data 业务数据
     * @param account 账号
     * @param level level
     * @return String
     */
    @PostMapping("/azbj/yazgl/xj/hz/savemessage")
    String saveXjHzMessage(@RequestParam String data,@RequestParam String account,@RequestParam String level);

    /**
     * 预安置管理 - 预释放人员衔接 - 衔接中 - 查看回执列表数据
     * @param priNum 服刑人员编号
     * @param xjrctId 核查回执节点的衔接id
     * @return List<XjReceiptDataVo>
     */
    @PostMapping("/azbj/xj/hz/listMessages")
    List<XjReceiptDataVo> findMessages(@RequestParam String priNum,@RequestParam(required = false, defaultValue = "-1") String xjrctId);

    /**
     * 预安置管理 - 预释放人员衔接 - 查看 - 档案材料
     * @param paramMap 查询参数
     * @return PrisonerXixxVo
     */
    @PostMapping("/select/selectXjxxByPriNum")
    PrisonerXixxVo xjxxJsonData(@RequestParam Map<String,Object> paramMap);

    /**
     * 预安置管理 - 预释放人员衔接 - 衔接中 - 保存
     * @param data 业务数据
     * @param userDTO 当前登录用户
     * @return Result
     */
    @RequestMapping("/azbj/yazgl/xj/save/fj")
    Result updateCompletelyData(
            @RequestParam String data,
            @RequestBody UserDTO userDTO);
    /**
     * 预安置管理 - 预释放人员衔接 - 未衔接 - 转入安置帮教
     * @param priNum 服刑人员编号
     * @param userDTO userDTO
     * @return Result
     * @throws Exception
     */
    @PostMapping("/azbj/yazgl/xj/move/anzhi")
    Result moveToAnZhi(@RequestParam String priNum,UserDTO userDTO) throws Exception;

    /**
     * 预安置管理 - 预释放人员衔接 - 衔接中 - 未衔接 - 列表
     * @param user 当前登录用户
     * @param searchMap 搜索条件
     * @param prisonerXjxxInVo 搜索条件,衔接信息
     * @return String
     */
    @PostMapping("/yazgl/xjxx/wxj/list")
    String getWxjList(
            @RequestBody UserDTO user,@RequestParam Map<String,Object> searchMap,PrisonerXjxxInVo prisonerXjxxInVo);

    /**
     * 预安置管理查看 - 基本信息 - 查询
     * @param priNum 服刑人员编号
     * @return Result
     */
    @RequestMapping("/azbj/baseInfo/toViewTabs/view/baseInfoTab")
    Result getBaseInfoViewByPriNum(@RequestParam String priNum);

    /**
     * 预安置管理 - 预释放人员衔接 - 衔接失败 - 重新发起衔接 - 保存
     * @param departid 部门编号
     * @param departName 部门名称
     * @param account 登录账号
     * @param data 业务数据
     * @return Result
     */
    @RequestMapping("/azbj/yazgl/xj/updateXj")
    Result updateXjxx(
            @RequestBody String data,
            @RequestParam String departid,@RequestParam String departName,@RequestParam String account);

    /**
     * 根据犯罪编号查询三五无三假等信息
     * @param priNum 服刑人员编号
     * @return Map<String,String>
     */
    @RequestMapping("/azbj/yazgl/getSwSjInfo")
    Map<String,String> getSwSjInfo(@RequestParam("priNum") String priNum);

    /**
     * 检查idnum是否存在
     * @param priNum 服刑人员编号
     * @param idnum 身份证
     * @return Result
     */
    @RequestMapping("/azbj/inmates/checkIdNum")
    Result checkIdNum(@RequestParam("priNum") String priNum,@RequestParam("idnum") String idnum);

    /**
     * 查询idnum的罪犯信息
     * @param idNum 用户的号码
     * @return String
     */
    @RequestMapping("/azbj/inmates/findPrisonerByIdNum")
    String findPrisonerByIdNum(@RequestParam("idNum") String idNum);

    /**
     * 根据犯罪编号查询罪犯信息
     * @param priNum 罪犯编号
     * @return PrisonerMain
     */
    @GetMapping("/azbj/inmates/baseinfo/selectPmById")
    PrisonerMain selectPmById(@RequestParam(value = "priNum") String priNum);

    /**
     * 推送数据展示，封装成PrisonerMainAndHcVo
     * @param id id
     * @return PrisonerMainAndHcVo
     */
    @GetMapping("/azbj/yazgl/hc/getPrisonerMainAndHcVoById/{id}")
    PrisonerMainAndHcVo getPrisonerMainAndHcVoById(@PathVariable("id") String id);

    /**
     * 山西个性化需求:预安置人员管理 - 全部人员管理
     * @param pageIndex pageIndex
     * @param pageSize pageSize
     * @param querykey querykey
     * @param idNum idNum
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @return String
     */
    @RequestMapping("/azbj/Qbry/info/list")
    String getQbryList(@RequestParam("pageIndex") Integer pageIndex,
                       @RequestParam("pageSize") Integer pageSize,
                       @RequestParam("querykey") String querykey,
                       @RequestParam("idNum") String idNum,
                       @RequestParam(required = false, name = "sortField") String sortField,
                       @RequestParam(required = false, name = "sortOrder") String sortOrder);
}